Necesitamos analizar los datos de tipo mixto, número, órdinal y nominal. Nos vamos a enfocar en clasificación no supervisada usando R CLUSTERING ALGORITHM: PARTITIONING AROUND MEDOIDS (PAM)
setwd("C:/Users/Pablo/Desktop/Machine_Learning_I/Práctica/Cluster")
df_root <- read.csv ("kc_house_data.csv")
set.seeds=737
df_mas <- sample_n(df_root, size = 1500)
La distancia es una medida numérica de cuán separados están los individuos, es decir una métrica utilizada para medir la proximidad o similitud entre individuos;
La distancia de Gower se calcula como el promedio de las diferencias parciales entre individuos. Para cada tipo de variable, se usa una métrica de distancia particular que funciona bien para ese tipo y se escala para caer entre 0 y 1
Para las variables cuantitativa La Distancia de Manhattan Para las Variables Ordinales la Distancia un ajuste especial de la Manhattan despúes de haber sido ordenadas Para las Nominales primero se convierte en k columnas Binarias ( para cada categoria de cada variable norminal) y posteriormente se usa el coeficiente de Dice
El coeficiente de Dice [0,1] para medir la similitud entre 2 muestras
Se escala de la siguiente Manera Se define la distancia de Gower como d2ij = 1 − sij , donde sij = p1h=1 (1 − |xih − xjh|/Gh) + a + α p1 + (p2 − d) + p3 es el coeficiente de similaridad de Gower,
p1 es el numero de variables cuantitativas continuas, p2 es el numero de variables binarias, p3 es el numero de variables cualitativas(no binarias), a es el numero de coincidencias (1, 1) en las variables binarias, d es el numero de coincidencias (0, 0) en las variables binarias, α es el numero de coincidencias en las variables cualitativas (no binarias) y Gh es el rango (o recorrido) de la h-esima variable cuantitativa.
gower_dist <- daisy(df_mas, metric = "gower")
## Warning in daisy(df_mas, metric = "gower"): binary variable(s) 9 treated as
## interval scaled
gower_mat <- as.matrix(gower_dist)
df_mas[which(gower_mat == min(gower_mat[gower_mat != min(gower_mat)]),
arr.ind = TRUE)[1, ], ]
## id date price bedrooms bathrooms sqft_living sqft_lot
## 1394 3630080070 7/10/2014 348000 3 2.5 1500 2255
## 1134 3630070280 7/10/2014 418000 2 2.5 1500 3608
## floors waterfront view condition grade sqft_above sqft_basement
## 1394 2 0 0 3 7 1500 0
## 1134 2 0 0 3 8 1500 0
## yr_built yr_renovated zipcode lat long sqft_living15
## 1394 2005 0 98029 47.5538 -121.997 1440
## 1134 2005 0 98029 47.5472 -121.994 2080
## sqft_lot15
## 1394 2040
## 1134 2686
df_mas[which(gower_mat == max(gower_mat[gower_mat != max(gower_mat)]),
arr.ind = TRUE)[1, ], ]
## id date price bedrooms bathrooms sqft_living sqft_lot
## 847 2420069042 4/24/2015 240000 3 2.0 1553 6550
## 552 7738500731 8/15/2014 4500000 5 5.5 6640 40014
## floors waterfront view condition grade sqft_above sqft_basement
## 847 1 0 0 3 7 1553 0
## 552 2 1 4 3 12 6350 290
## yr_built yr_renovated zipcode lat long sqft_living15
## 847 1900 2001 98022 47.2056 -121.994 1010
## 552 2004 0 98155 47.7493 -122.280 3030
## sqft_lot15
## 847 10546
## 552 23408
Una vez calculada la matriz de distancia emplearemos el algoritmo PAM, basado en una partición de medoids (El término medoids se refiere a un objeto dentro de un grupo para el cual la diferencia promedio entre este y todos los demás miembros del grupo es mínima, es decir el punto más centralmente ubicado del conjunto de datos), en cambio en el método K-means cada Cluster está representado por su centroide. Es un método muy similar a k-means, pero es mucho más robusto a la presencia de Outliers como es en nuestro caso. Es un procedimiento de agrupación iterativa que implica los siguientes pasos:
Elejir k entidades aleatorias para convertirse en los Medoids ## Step 2 Asignamos a cada entidad, en nuestro caso a cada “casa” el medoide más cercano basado en la distancia de Gower anteriormente calculada. ## Step 3 Para cada Cluster identificar la observación que produciría la distancia promedio más baja si fuera reasiganada como el Medoid, si fuera así hay que hacer de esta observación el nuevo Medoid. Si al menos un Medoid ha cambiado volvemos Step2, en caso contrario Step4 ## Step 4 FIN
K Means intenta mininizar el ECM total K Medoids minimiza la suma de las diferencias entre los puntos etiquetados para estar en un grupo y un punto designado como el centro de ese grupo Mediod.
Silhouette, Validación y consistencia dentro de los datos.
Es una medida de cuan similar es objeto dentro del grupo de pertenencia y cuan disimilar con los otros grupos.
Varía entre -1 y 1. Un valor alto indica que un objeto está bien emparejado dentro de su grupo y mal con el resto. Un valor muy bajo o negativo implica una revisión del número de cluster al alza o a la baja
sil_width <- c(NA)
for(i in 2:10){
pam_fit <- pam(gower_dist, diss = TRUE, k = i)
sil_width[i] <- pam_fit$silinfo$avg.width
}
plot(1:10, sil_width,
xlab = "Numero de clusters",
ylab = "Silhouette")
lines(1:10, sil_width)
Después de calcular el Silhouette para el algoritmo PAM vemos que 2 grupos producen el valor más alto. Aún asi nosotros seleccionamos 3 Cluster para dividir la dispersión del Trabajo y facilitar el entendimiento de los siguientes análisis.
set.seed=737
k <- 3
pam_fit <- pam(gower_dist, diss = TRUE, k)
pam_results <- df_mas %>%
mutate(cluster = pam_fit$clustering) %>%
group_by(cluster) %>%
do(the_summary = summary(.))
#frecuencia del número de casas en cada Clúster
ftable(pam_fit$clustering)
## 1 2 3
##
## 337 589 574
#descriptivo en cada Clúster
pam_results$the_summary
## [[1]]
## id date price bedrooms
## Min. :2.800e+06 3/18/2015 : 7 Min. : 95000 Min. :1.000
## 1st Qu.:1.864e+09 8/19/2014 : 5 1st Qu.: 242000 1st Qu.:3.000
## Median :3.751e+09 10/10/2014: 4 Median : 289000 Median :3.000
## Mean :4.345e+09 10/28/2014: 4 Mean : 353942 Mean :3.196
## 3rd Qu.:7.230e+09 12/16/2014: 4 3rd Qu.: 427500 3rd Qu.:4.000
## Max. :9.836e+09 12/22/2014: 4 Max. :1550000 Max. :5.000
## (Other) :309
## bathrooms sqft_living sqft_lot floors
## Min. :0.750 Min. : 720 Min. : 1968 Min. :1.000
## 1st Qu.:1.500 1st Qu.:1280 1st Qu.: 7599 1st Qu.:1.000
## Median :1.750 Median :1550 Median : 9135 Median :1.000
## Mean :1.759 Mean :1644 Mean : 17704 Mean :1.102
## 3rd Qu.:2.000 3rd Qu.:1930 3rd Qu.: 12252 3rd Qu.:1.000
## Max. :3.000 Max. :3230 Max. :257875 Max. :2.500
##
## waterfront view condition grade
## Min. :0.000000 Min. :0.0000 Min. :1.000 Min. : 4.000
## 1st Qu.:0.000000 1st Qu.:0.0000 1st Qu.:3.000 1st Qu.: 7.000
## Median :0.000000 Median :0.0000 Median :4.000 Median : 7.000
## Mean :0.002967 Mean :0.1365 Mean :3.864 Mean : 6.997
## 3rd Qu.:0.000000 3rd Qu.:0.0000 3rd Qu.:4.000 3rd Qu.: 7.000
## Max. :1.000000 Max. :3.0000 Max. :5.000 Max. :10.000
##
## sqft_above sqft_basement yr_built yr_renovated
## Min. : 680 Min. : 0.0 Min. :1900 Min. : 0.00
## 1st Qu.:1170 1st Qu.: 0.0 1st Qu.:1958 1st Qu.: 0.00
## Median :1340 Median : 0.0 Median :1967 Median : 0.00
## Mean :1383 Mean : 260.6 Mean :1965 Mean : 82.88
## 3rd Qu.:1570 3rd Qu.: 530.0 3rd Qu.:1978 3rd Qu.: 0.00
## Max. :2460 Max. :1750.0 Max. :2013 Max. :2015.00
##
## zipcode lat long sqft_living15
## Min. :98001 Min. :47.19 Min. :-122.5 Min. : 840
## 1st Qu.:98022 1st Qu.:47.34 1st Qu.:-122.2 1st Qu.:1420
## Median :98032 Median :47.42 Median :-122.2 Median :1640
## Mean :98041 Mean :47.44 Mean :-122.2 Mean :1719
## 3rd Qu.:98055 3rd Qu.:47.53 3rd Qu.:-122.1 3rd Qu.:2000
## Max. :98198 Max. :47.78 Max. :-121.7 Max. :3010
##
## sqft_lot15 cluster
## Min. : 1848 Min. :1
## 1st Qu.: 7590 1st Qu.:1
## Median : 8886 Median :1
## Mean : 17544 Mean :1
## 3rd Qu.: 10807 3rd Qu.:1
## Max. :297514 Max. :1
##
##
## [[2]]
## id date price bedrooms
## Min. :7.600e+06 4/22/2015: 9 Min. : 82500 Min. :1.000
## 1st Qu.:2.114e+09 6/24/2014: 9 1st Qu.: 335000 1st Qu.:2.000
## Median :3.996e+09 7/22/2014: 7 Median : 440000 Median :3.000
## Mean :4.590e+09 2/25/2015: 6 Mean : 475007 Mean :3.002
## 3rd Qu.:7.229e+09 4/6/2015 : 6 3rd Qu.: 565000 3rd Qu.:3.000
## Max. :9.834e+09 6/16/2014: 6 Max. :1370000 Max. :8.000
## (Other) :546
## bathrooms sqft_living sqft_lot floors
## Min. :0.500 Min. : 520 Min. : 649 Min. :1.000
## 1st Qu.:1.000 1st Qu.:1200 1st Qu.: 4057 1st Qu.:1.000
## Median :1.750 Median :1560 Median : 6000 Median :1.000
## Mean :1.761 Mean :1623 Mean : 7755 Mean :1.308
## 3rd Qu.:2.250 3rd Qu.:1990 3rd Qu.: 8100 3rd Qu.:1.500
## Max. :3.750 Max. :3690 Max. :159865 Max. :3.000
##
## waterfront view condition grade
## Min. :0.000000 Min. :0.0000 Min. :1.000 Min. : 5.000
## 1st Qu.:0.000000 1st Qu.:0.0000 1st Qu.:3.000 1st Qu.: 7.000
## Median :0.000000 Median :0.0000 Median :3.000 Median : 7.000
## Mean :0.001698 Mean :0.2207 Mean :3.418 Mean : 7.126
## 3rd Qu.:0.000000 3rd Qu.:0.0000 3rd Qu.:4.000 3rd Qu.: 8.000
## Max. :1.000000 Max. :4.0000 Max. :5.000 Max. :10.000
##
## sqft_above sqft_basement yr_built yr_renovated
## Min. : 490 Min. : 0.0 Min. :1900 Min. : 0.00
## 1st Qu.:1010 1st Qu.: 0.0 1st Qu.:1926 1st Qu.: 0.00
## Median :1250 Median : 140.0 Median :1950 Median : 0.00
## Mean :1281 Mean : 342.1 Mean :1951 Mean : 91.58
## 3rd Qu.:1480 3rd Qu.: 680.0 3rd Qu.:1968 3rd Qu.: 0.00
## Max. :2740 Max. :1500.0 Max. :2015 Max. :2014.00
##
## zipcode lat long sqft_living15
## Min. :98004 Min. :47.36 Min. :-122.4 Min. : 700
## 1st Qu.:98107 1st Qu.:47.55 1st Qu.:-122.4 1st Qu.:1320
## Median :98118 Median :47.65 Median :-122.3 Median :1570
## Mean :98121 Mean :47.63 Mean :-122.3 Mean :1633
## 3rd Qu.:98146 3rd Qu.:47.70 3rd Qu.:-122.3 3rd Qu.:1870
## Max. :98199 Max. :47.78 Max. :-121.3 Max. :3720
##
## sqft_lot15 cluster
## Min. : 915 Min. :2
## 1st Qu.: 4080 1st Qu.:2
## Median : 6000 Median :2
## Mean : 7668 Mean :2
## 3rd Qu.: 8103 3rd Qu.:2
## Max. :215622 Max. :2
##
##
## [[3]]
## id date price bedrooms
## Min. :1.130e+07 6/20/2014: 9 Min. : 199950 Min. :2.000
## 1st Qu.:2.108e+09 7/31/2014: 8 1st Qu.: 469912 1st Qu.:3.000
## Median :3.892e+09 10/9/2014: 7 Median : 672250 Median :4.000
## Mean :4.556e+09 3/25/2015: 7 Mean : 774354 Mean :3.862
## 3rd Qu.:7.214e+09 5/21/2014: 7 3rd Qu.: 899750 3rd Qu.:4.000
## Max. :9.561e+09 5/28/2014: 7 Max. :4500000 Max. :8.000
## (Other) :529
## bathrooms sqft_living sqft_lot floors
## Min. :1.000 Min. :1240 Min. : 704 Min. :1.000
## 1st Qu.:2.500 1st Qu.:2229 1st Qu.: 5498 1st Qu.:2.000
## Median :2.500 Median :2730 Median : 8322 Median :2.000
## Mean :2.787 Mean :2870 Mean : 20278 Mean :1.936
## 3rd Qu.:3.000 3rd Qu.:3320 3rd Qu.: 13665 3rd Qu.:2.000
## Max. :5.500 Max. :7100 Max. :422967 Max. :3.000
##
## waterfront view condition grade
## Min. :0.0000 Min. :0.0000 Min. :2.000 Min. : 7.000
## 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:3.000 1st Qu.: 8.000
## Median :0.0000 Median :0.0000 Median :3.000 Median : 9.000
## Mean :0.0122 Mean :0.3467 Mean :3.209 Mean : 8.688
## 3rd Qu.:0.0000 3rd Qu.:0.0000 3rd Qu.:3.000 3rd Qu.: 9.000
## Max. :1.0000 Max. :4.0000 Max. :5.000 Max. :13.000
##
## sqft_above sqft_basement yr_built yr_renovated
## Min. :1150 Min. : 0.0 Min. :1900 Min. : 0.00
## 1st Qu.:2022 1st Qu.: 0.0 1st Qu.:1984 1st Qu.: 0.00
## Median :2476 Median : 0.0 Median :1997 Median : 0.00
## Mean :2587 Mean : 282.8 Mean :1991 Mean : 79.96
## 3rd Qu.:3038 3rd Qu.: 497.5 3rd Qu.:2006 3rd Qu.: 0.00
## Max. :6640 Max. :2720.0 Max. :2015 Max. :2010.00
##
## zipcode lat long sqft_living15
## Min. :98001 Min. :47.19 Min. :-122.5 Min. : 700
## 1st Qu.:98027 1st Qu.:47.49 1st Qu.:-122.3 1st Qu.:2040
## Median :98052 Median :47.59 Median :-122.2 Median :2470
## Mean :98058 Mean :47.57 Mean :-122.2 Mean :2535
## 3rd Qu.:98075 3rd Qu.:47.67 3rd Qu.:-122.0 3rd Qu.:2960
## Max. :98199 Max. :47.78 Max. :-121.7 Max. :4900
##
## sqft_lot15 cluster
## Min. : 750 Min. :3
## 1st Qu.: 5424 1st Qu.:3
## Median : 8194 Median :3
## Mean : 17249 Mean :3
## 3rd Qu.: 12561 3rd Qu.:3
## Max. :422967 Max. :3
##
Nº de Observaciones 7.255 Precio medio 498.294
Nº de habitaciones 3.111
Nº de Banyos 1.663 Nº de Plantas 1.22 Metros cuadrado 1.679 Vistas al mar 0.00634
Visitas 0.2571 Condicion Media 3.47 Grado Medio 7.065 Anyo Contruccion 1944
Nº de Observaciones 5.687 Precio medio 412.375
Nº de habitaciones 3.345 Nº de Banyos 1.851 Nº de Plantas 1.068 Metros cuadrado 1.808 Vistas al mar 0.006682 Visitas 0.1721 Condicion Media 3.775 Grado Medio 7.19 Anyo Contruccion 1968
Nº de Observaciones 8.655 Precio medio 659.559
Nº de habitaciones 3.611 Nº de Banyos 2.669 Nº de Plantas 2.004 Metros cuadrado 2.014 Vistas al mar 0.00912 Visitas 0.256 Condicion Media 3.119
Grado Medio 8.463 Anyo Contruccion 1996
El PCA es un algoritmo lienal, no podrá interpretar relaciones complejas polinómicas entre los items del dataset. Vemos que en los dos primeros componentes recogemos el 50,35% de la variabilidad Seleccionando aquellos componentes con autovalor mayor a 1,los Cuatro Primeros, explican el 71,5% de la variabilidad total.
data<- subset(df_mas, select=c("price", "bedrooms","bathrooms","sqft_living","sqft_lot","floors","waterfront", "view","condition","grade","sqft_above","sqft_basement","sqft_living15","sqft_lot15"))
pca<- prcomp(data, scale=TRUE)
summary (pca)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6
## Standard deviation 2.3256 1.3602 1.2790 1.12476 0.89615 0.83022
## Proportion of Variance 0.3863 0.1321 0.1168 0.09036 0.05736 0.04923
## Cumulative Proportion 0.3863 0.5185 0.6353 0.72568 0.78304 0.83228
## PC7 PC8 PC9 PC10 PC11 PC12
## Standard deviation 0.76336 0.74993 0.58364 0.52411 0.46747 0.44626
## Proportion of Variance 0.04162 0.04017 0.02433 0.01962 0.01561 0.01422
## Cumulative Proportion 0.87390 0.91407 0.93840 0.95802 0.97363 0.98786
## PC13 PC14
## Standard deviation 0.41233 1.312e-15
## Proportion of Variance 0.01214 0.000e+00
## Cumulative Proportion 1.00000 1.000e+00
fviz_eig(pca)
A través de los Scores de cada variable dentro del componente Principal podemos libremente afirmar y con fines explicativos;
Precio/m2 38% de la variabilidad ## PC2 Espacio Sotano 12% de la variabilidad ## PC3 Espacio Parcela 12% de la varibiliidad ## PC4 Vistas al Mar 9% de la variabilidad
pca
## Standard deviations (1, .., p=14):
## [1] 2.325609e+00 1.360202e+00 1.278987e+00 1.124760e+00 8.961549e-01
## [6] 8.302218e-01 7.633611e-01 7.499347e-01 5.836396e-01 5.241091e-01
## [11] 4.674685e-01 4.462595e-01 4.123309e-01 1.312470e-15
##
## Rotation (n x k) = (14 x 14):
## PC1 PC2 PC3 PC4
## price 0.33592998 0.01009483 -0.19828996 0.157970939
## bedrooms 0.26588180 -0.06040847 -0.12282055 -0.334734750
## bathrooms 0.35901450 -0.08948523 -0.01042530 -0.105533325
## sqft_living 0.40824276 0.02707993 -0.04998273 -0.117812244
## sqft_lot 0.09715014 0.60297724 0.32604648 -0.012896489
## floors 0.21833994 -0.30980594 0.32973724 0.136284917
## waterfront 0.07696161 0.08012209 -0.18640320 0.692556325
## view 0.14875818 0.17698171 -0.34088809 0.461241604
## condition -0.04831934 0.20717225 -0.39887071 -0.242764227
## grade 0.37683756 -0.08221184 0.03967249 -0.006001006
## sqft_above 0.38098320 -0.10429834 0.20936298 0.007662578
## sqft_basement 0.12577199 0.25402312 -0.50082088 -0.259294848
## sqft_living15 0.35337880 0.04002432 0.02222020 -0.024206788
## sqft_lot15 0.07454612 0.60292427 0.34811715 0.003722766
## PC5 PC6 PC7 PC8
## price -0.099597747 0.203760797 -0.2580028726 0.06330785
## bedrooms -0.018482836 -0.522250809 0.4276419250 -0.43542537
## bathrooms 0.073246598 -0.259518981 0.0000601445 0.24313360
## sqft_living 0.069247830 0.002954439 -0.0891225293 -0.04159066
## sqft_lot 0.009224849 -0.089981270 0.0033784220 0.06229947
## floors -0.179953501 -0.253077781 0.1843054729 0.61971669
## waterfront -0.081038655 -0.511047908 -0.3494145794 -0.20572616
## view 0.060126086 0.271223706 0.7169514892 0.10037889
## condition -0.827147703 -0.013123726 -0.0409678502 0.16434781
## grade 0.004180125 0.253572122 -0.1730557863 0.11143305
## sqft_above -0.171658863 0.073426868 -0.0028889268 -0.22444444
## sqft_basement 0.469354366 -0.133087985 -0.1796824357 0.33916505
## sqft_living15 -0.035668295 0.346652068 -0.0785180332 -0.31361622
## sqft_lot15 -0.041282780 -0.061293702 0.0493790502 0.04508949
## PC9 PC10 PC11 PC12
## price -0.728147998 0.02761124 0.293598292 -0.26804655
## bedrooms -0.246174233 0.22365388 0.118339313 0.16109091
## bathrooms 0.265927734 -0.66994686 0.413911123 -0.04664624
## sqft_living 0.052759116 -0.07718104 -0.449240618 -0.21146975
## sqft_lot -0.126012531 -0.06490556 -0.304756623 0.08890671
## floors 0.031151601 0.43717549 -0.049862529 -0.13387671
## waterfront 0.161349568 0.06744470 -0.038691145 0.09291217
## view 0.045690480 -0.09800650 -0.059686909 0.02833146
## condition 0.135689969 -0.01945925 -0.056404394 0.04118896
## grade -0.024953567 0.06206308 -0.001847594 0.85405490
## sqft_above 0.003557970 -0.21546174 -0.418209210 -0.19101068
## sqft_basement 0.102865542 0.24819050 -0.140363820 -0.07716868
## sqft_living15 0.510952052 0.40746909 0.294090866 -0.21201482
## sqft_lot15 0.005132805 0.08159547 0.376773997 -0.03931990
## PC13 PC14
## price -0.108411627 4.448931e-16
## bedrooms -0.048864817 -8.170574e-17
## bathrooms -0.164259708 -1.063293e-15
## sqft_living 0.249238837 6.959547e-01
## sqft_lot -0.622543507 -8.499485e-17
## floors -0.045790253 1.556391e-16
## waterfront 0.020341296 1.340282e-16
## view 0.016403366 -1.568287e-16
## condition 0.003169665 -2.377051e-16
## grade 0.095158502 3.160258e-16
## sqft_above 0.231484861 -6.351649e-01
## sqft_basement 0.078893512 -3.349815e-01
## sqft_living15 -0.296544923 3.250141e-17
## sqft_lot15 0.591273532 -3.030254e-20
Visualizaremos nuestros 3 Clústeres dentro del plano PC1 y PC2, Observamos que tenemos problemas los valores extremos por un lado y por otro la gran partes de los items se nos acumulan muy próximos lo cual no nos facilita la comprensión de los Grupos.
Planteamos nuesvas alternativas al entender que el PCA es insuficiente para interpretar nuestros Clusters
#join pca data y df cluster
pam_fit$clustering <- as.character(pam_fit$clustering)
pca_data <- data.frame(pca$x, cluster=pam_fit$clustering)
ggplot(pca_data, aes(x=PC1, y=PC2, color=cluster)) + geom_point()
Algoritmo de reducción de dimensionalidad no lineal, encuentra patrones en los datos mediante la identificación de grupos observados basados en la similitud de puntos de datos con múltiples características.
Esta técnica permite utilizar la métrica anteiormente creada, la Distancia de Gower, en nuestro caso se muestran los tres grupos que seleccionamos anteriorenteme con el algortimo PAM.
Asigna los datos multidimensionales creados en la Distancia de Gower anteriormente calculada a un espacio dimensional menor.
Muy útil para el “crowding problem” que implica “la maldición de la dimensión” y básicamente en nuestro caso afecta ya que al aumentar el número de dimensiones la distancia al vecino más próximo aumenta.
Comienza convirtiendo la distancia, nuestro caso Gower, entre los puntos de datos en medidas de probabilidad condicionales que representan similtud entre los datos. Función Gaussiana, probabilidad alta y probabilidad Baja Hay que prestar atención a las colas que son estrechas y pueden acumular mucha relación de puntos.
Representando la distribución de Probabilidad. La idea intuitiva es realizar asignaciones de baja dimensión que representen distribuciones de probabilidad similares, aquí nos podemos encontrar con “crowding problem” debido a las “colas cortas” de las distribuciones Gaussianas. Para subsanar este problema y que los puntos tengan una “cola más larga” la t-sne usa uns distribución T-stundent con un grado de libertad. La optimización de esta distribución t-student se realiza mediante una función Gradiente Descendiente que intuitivamenete representa la fuerza y la atracción-repulsión entre dos puntos. Gradiente positivo implica atracción y al contrario. Este “push-and-pull” hace que los puntos se asienten en espacio de baja dimensionalidad.
Las t-snes no tienen parámetros y optimizan directamente a través de la función de Coste Gradiente que es No Convexa y puede darnos problemas con los mínimos locales. Existen funciones para corregir este crecimiento de la función Gradiente sobre todo al comienzo del algoritmo. Importante el concepto de vecino estocásticos lo cual implica que no está cerrada la frontera de los puntos que son vecinos contra los puntos que no lo son permitiendo al algotimo tener en cuenta la estructura local como la global.( esto lo realizaremos con el parámetro perplexity)
En la siguiente visualización aparecen los 3 clúster dentro los ejes X e Y El número de dimensiones por defecto es 2
Perplexity es el parámetro que usamos para equilibrar el aspecto local y global de los datos, es en cierta medida determinar de forma supuesta cuanto es el número de vecinos quye tendría cada item ( en nuestro ejemplo casa) por defecto es 20, si lo concentramos mucho o lo dispersamos mucho
tsne_obj <- Rtsne(gower_dist,perplexity = 20, is_distance = TRUE)
tsne_data <- tsne_obj$Y %>%
data.frame() %>%
setNames(c("X", "Y")) %>%
mutate(cluster = factor(pam_fit$clustering))
ggplot(aes(x = X, y = Y), data = tsne_data) + geom_point(aes(color = cluster))
#join tsne data y df original
df_join<-cbind(tsne_data,df_mas)
plot_ly(
df_join, x = ~X, y = ~Y,
color = ~floors, size = ~price)
## No trace type specified:
## Based on info supplied, a 'scatter' trace seems appropriate.
## Read more about this trace type -> https://plot.ly/r/reference/#scatter
## No scatter mode specifed:
## Setting the mode to markers
## Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode
## Warning: `line.width` does not currently support multiple values.
tsne_obj <- Rtsne(gower_dist,perplexity = 50, is_distance = TRUE)
tsne_data <- tsne_obj$Y %>%
data.frame() %>%
setNames(c("X", "Y")) %>%
mutate(cluster = factor(pam_fit$clustering))
ggplot(aes(x = X, y = Y), data = tsne_data) +
geom_point(aes(color = cluster))
#join tsne data y df original
df_join<-cbind(tsne_data,df_mas)
plot_ly(
df_join, x = ~X, y = ~Y,
color = ~condition, size = ~sqft_living )
## No trace type specified:
## Based on info supplied, a 'scatter' trace seems appropriate.
## Read more about this trace type -> https://plot.ly/r/reference/#scatter
## No scatter mode specifed:
## Setting the mode to markers
## Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode
## Warning: `line.width` does not currently support multiple values.
Observamos en esta representación que existen grupos mucho más identificables y detallados que en la representación PCA.
tsne_obj <- Rtsne(gower_dist,perplexity = 80, is_distance = TRUE)
tsne_data <- tsne_obj$Y %>%
data.frame() %>%
setNames(c("X", "Y")) %>%
mutate(cluster = factor(pam_fit$clustering))
ggplot(aes(x = X, y = Y), data = tsne_data) +
geom_point(aes(color = cluster))
#join tsne data y df original
df_join<-cbind(tsne_data,df_mas)
plot_ly(
df_join, x = ~X, y = ~Y,
color = ~condition, size = ~sqft_living )
## No trace type specified:
## Based on info supplied, a 'scatter' trace seems appropriate.
## Read more about this trace type -> https://plot.ly/r/reference/#scatter
## No scatter mode specifed:
## Setting the mode to markers
## Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode
## Warning: `line.width` does not currently support multiple values.
Exportamos el fichero con la nueva variable Cluster para continuar con nuestros análisis.
write.csv(df_join,file="cluster.csv")